function textbar(label,totbars,prog,maxprog)
% function textbar(label,totbars,prog,maxprog)
%
% Where:
%   label           = string containing label for textbar
%   totbars         = total number of bars to display in textbar
%   prog            = current progress
%   maxprog         = maximum progress
%
% Example
%   for ii = 1:ntraces
%       textbar('Reading Traces: ',25,ii,ntraces)
%   end
%  
%  Authors: Kevin Hall, 2017
%
% NOTE: This SOFTWARE may be used by any individual or corporation for any purpose
% with the exception of re-selling or re-distributing the SOFTWARE.
% By using this software, you are agreeing to the terms detailed in this software's
% Matlab source file.

% BEGIN TERMS OF USE LICENSE
%
% This SOFTWARE is maintained by the CREWES Project at the Department
% of Geology and Geophysics of the University of Calgary, Calgary,
% Alberta, Canada.  The copyright and ownership is jointly held by
% its 'AUTHOR' (identified above) and the CREWES Project.  The CREWES
% project may be contacted via email at:  crewesinfo@crewes.org
%
% The term 'SOFTWARE' refers to the Matlab source code, translations to
% any other computer language, or object code
%
% Terms of use of this SOFTWARE
%
% 1) This SOFTWARE may be used by any individual or corporation for any purpose
%    with the exception of re-selling or re-distributing the SOFTWARE.
%
% 2) The AUTHOR and CREWES must be acknowledged in any resulting publications or
%    presentations
%
% 3) This SOFTWARE is provided "as is" with no warranty of any kind
%    either expressed or implied. CREWES makes no warranties or representation
%    as to its accuracy, completeness, or fitness for any purpose. CREWES
%    is under no obligation to provide support of any kind for this SOFTWARE.
%
% 4) CREWES periodically adds, changes, improves or updates this SOFTWARE without
%    notice. New versions will be made available at www.crewes.org .
%
% 5) Use this SOFTWARE at your own risk.
%
% END TERMS OF USE LICENSE

narginchk(4,4)

persistent oldnumbars

leftbracket  = '[';
rightbracket = ']';
noprogchar   = ' ';
progchar     = '*';

%convert progress to bars
numbars = round(totbars*prog/maxprog);

if isempty(oldnumbars) %first time textbar has been called
    fprintf(['\n' label leftbracket ...
        repmat(noprogchar,1,totbars) rightbracket]); %print textbar; note no \n
    oldnumbars=numbars; %update oldnumbars for next call to textbar
elseif ~isequal(numbars,oldnumbars)
    fprintf([repmat('\b',1,totbars+1) ...
        repmat(progchar,1,numbars) ...
        repmat(noprogchar,1,totbars-numbars) rightbracket]); %print textbar; note no \n
    oldnumbars=numbars; %update oldnumbars for next call to textbar
end

if isequal(prog,maxprog) %last call to textbar, print a new line
    oldnumbars=[];
    fprintf([repmat('\b',1,totbars+1) ...
        repmat(progchar,1,totbars) ...
        rightbracket '\n\n']); %print textbar; note: \n, finally.
end   

end %end function